package day02;
// 基本数据类型的演示
public class DataTypeDemo {
    public static void main(String[] args) {
        // 1、 int： 整形 4个字节 -21个多亿 ~ 21个多亿
        int a = 25 ;
        int b = 2147483647 ; // Int 最大值
        int c = b + 1 ; // 运算量超出最大值 —— 溢出
        System.out.println( c );

        // 2、long: 长整型 8个字节 -900万万亿 ~ 900万万亿
        long aa = 125l ; // 125l 为长整型直接量
        long bb = 1000000000L ; // 1000000000L 为长整型 直接量
        long cc = 10120310231L ; // 编译错误 长整型变量中 只能装整数

        long dd = 1000000000 * 2 * 10L ; // 20亿 是 int 可运算
        System.out.println( dd );

        long ee = 1000000000 * 3 * 10L ; // 30亿 是 int 溢出
        System.out.println( ee );

        long ff = 1000000000L * 3 * 10 ; // 30亿 是 long 可运算
        System.out.println( ff );

        long gg = 1000000000000000L * 10 * 10 ;
        System.out.println( gg );
        long hh = gg + 1 ;
        System.out.println( hh );

        long ii = gg + hh ;
        System.out.println( ii );
        long oo = ii + gg + hh ;
        oo = oo + ii + gg + hh ;
        System.out.println( oo );

        long pp ;
        pp = oo ;
        pp = pp + pp ;
        System.out.println( pp );

        long qq ;
        qq = pp + 989898989898L ;
        System.out.println( qq );

        long zz = qq + qq + qq ;
        zz = zz + zz - zz - zz ;
        System.out.println( zz );

        long pa = 800 + 900 + 1000 ;
        pa = pa * pa ;
        System.out.println( pa );
        pa = pa + pa + pa + pa * pa ;
        System.out.println( pa );

        int pb = 998 + 648 ;
        long pc = 998 * 648 ;
        System.out.println( pb + pc );
        long pd = pb + pc ;
        pd = 666 + pd ;
        System.out.println( pd );

        // 3、double 浮点型 占用8个字节 范围很大很大很大
        double aaa = 3.14 ; //  3.14 为小数直接量 默认 double 型
        double bbb = 25.678 ; // 25.678 为小数直接量 默认 double 型
        float ccc = 25.678F ; // 25.678F 为小数直接量 是 float 型

        double ddd = 3.0 , eee = 2.9 ;
        System.out.println( ddd - eee ); // 结果为 0.10000000000000009 ( 这个结果叫舍入误差 )

        double fff ;
        fff = 9.9 ;
        pd = pd + 9 ;
        System.out.println( pd - fff );

        fff = fff * fff ;
        System.out.println( fff );
        fff = fff * 0.005 ;
        System.out.println( fff );

        double qp ;
        qp = 3.1415926 ;
        qp = qp / 3.1415926 ;
        System.out.println( qp );

        double pq ;
        pq = qp - 3.333 ;
        System.out.println( pq );

        qp = qp * 3.66879 ;
        pq = qp * 0.05 / 0.88 + 3.66 - 5.44 ;
        System.out.println( pq );

        float adad = 6.666F ;
        System.out.println( adad );
        adad = adad + adad ;
        System.out.println( adad );

        // 4、boolean ; 布尔型 1个字节
        boolean aaaa = true ; // true 为布尔型 直接量
        boolean bbbb = false ; // false 为布尔型 直接量

        boolean ad = true || false ;
        System.out.println( ad );
        ad = ad && true ;
        System.out.println( ad );

        String adadad = " 快乐小熊猫 " ;
        boolean ed = adadad.length() >= 1 || adadad.length() >= 8 ;
        System.out.println( ed );

        String oqwwei = " aba aba ";
        boolean ooo = oqwwei.length() >= 1 && oqwwei.length() <= 100 ;
        System.out.println( ooo );

        // 5、 char 字符型 2个字节
        char c1 = '女' ; // 字符女
        char c2 = 'F' ; // 字符 F
        char c3 = '6' ; // 字符 6
        char c4 = '*' ; // 字符 *
        char c5 = 65 ; // 必须要在 65535 ~ 0 之间
        System.out.println( c5 ); // println() 输出是 回一句变量类型展示
        // 如果 c5 是 /char 型 那么就会以字符的形式展示
        // 如果 c5 是 /int 型 就会以数字的形式显示
        char c6 = '\\' ;
        // 叫做转义单引号
        System.out.println( c6 );

        char b1 = '女';
        char b2 = '男';
        char b3 = '厕';
        char b4 = '都';
        char b5 = '所';
        char b8 = '去';
        char b9 = '上';
        System.out.println( b2 );
        System.out.println( b2 );
        System.out.println( b1 );
        System.out.println( b1 );
        System.out.println( b4 );
        System.out.println( b8 );
        System.out.println( b9 );
        System.out.println( b3 );
        System.out.println( b5 );

        String a1 = "山有木兮木有枝.";
        String a2 = "心悦君兮君不知.";
        System.out.println( a1 );
        System.out.println( a2 );

        // 类型间的转换：
        int aaaaa = 5 ;
        long bbbbb = aaaaa ; // 自动类型转
        int ccccc = (int)bbbbb ; // 强制类型转

        int o1 = 100 ;
        long o2 = o1 ;
        int o3 = (int)o2 ;
        System.out.println( o3 );
        double o4 = o3 ;
        System.out.println( o4 );
        int o5 = (int)o4 ;
        System.out.println( o5 );

        o1 = o3 + o5 + (int)o2 + (int)o4 ;
        System.out.println( o1 );

        o2 = o1 + o3 + o5 + (long)o4 ;
        System.out.println( o2 );

        o4 = o1 + o2 + o3 + o5 ;
        System.out.println( o4 );

        // 类型间的转换：
        byte bb1 = 127 ; // byte 最大值
        byte bb2 = 6 ;
        byte bb3 = 7 ;
        byte bb4 = (byte) ( bb2 + bb3 ) ;
        System.out.println( bb4 );

        System.out.println(2+2); // int 模式 就是 2+2 是 4
        System.out.println(2+'2'); // char 参与运算 首先转换成 Int 是 52
        System.out.println('2'+'2'); // char '2' 字符2 结果是100

        System.out.println((int)'2');
        System.out.println((int)'女');
        System.out.println((int)'人');
        System.out.println((int)'d');

        int jd1 = 5/2 ;
        System.out.println( jd1 );

        double jd2 = 5.0/2 ;
        System.out.println( jd2 );

        double jd3 = 5/2 ;
        System.out.println( jd3 );

        double balance = 5000.0 ; // 账户余额
        balance = balance + 1000 ; // 存 1000
        System.out.println( balance ); // 结果为 6000.0
        balance = balance - 2000 ; // 取2000元
        System.out.println( balance ); // 结果为 4000.0
    }
}
